S3 を libs3 から触ってみた
前回に引き続き C ライブラリ特集みたいになってきましたが、今回は C 言語から S3 にアクセスできる libs3 を触ってみました。
インストールと準備
brew による追加のビルドツールおよびライブラリは特に必要ありません。(linux では libcurl と libxml2 が必要となります。)
$ git clone https://github.com/bji/libs3.git $ cd libs3 $ make -f GNUmakefile.osx DESTDIR=/path/to/libs3dir install
make install により /path/to/libs3dir/lib にライブラリ (mac の場合は libs3.dylib) が、/path/to/libs3dir/bin に s3 という libs3 ライブラリを使用した CLI プログラムがそれぞれインストールされます。
また、確認のためのサーバとして今回は fake-s3 を使ってみます。
$ gem install fake-s3 $ fakes3 --root=/tmp/fakes3 --port=8080
実行
libs3 の動作確認ということで s3 が libs3 に依存していることを確認します。
$ otool -L s3 s3: libs3.2.dylib (compatibility version 2.0.0, current version 2.0.0) /usr/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 8.0.0) /usr/lib/libxml2.2.dylib (compatibility version 10.0.0, current version 10.9.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
適当に bucket を create して、file を put してみます。 s3 は access_key_id と secret_access_key を環境変数で渡すことが必須となっているため、今回は空文字列以外を指定しています。 また、endpoint が localhost になるため、こちらも環境変数で指定しています。
$ export S3_ACCESS_KEY_ID="test" S3_SECRET_ACCESS_KEY="test" S3_HOSTNAME="localhost:8080" $ s3 -u list classmethod.testbucket ERROR: ErrorNoSuchBucket Message: The resource you requested does not exist Resource: classmethod.testbucket Extra Details: RequestId: 1 $ s3 -u create classmethod.testbucket Bucket successfully created. $ s3 -u list classmethod.testbucket Key Last Modified Size -------------------------------------------------- -------------------- ----- $ seq 1 1000 > data $ s3 -u put classmethod.testbucket/key filename=data $ s3 -u list classmethod.testbucket Key Last Modified Size -------------------------------------------------- -------------------- ----- key 2015-07-07T18:30:24Z 3893
put 前の list では何も表示されないですが、put 後の list では data が置かれていることがわかります。
まとめ
既存の C 言語で書かれたツールに組み込んだりする時など、用途は限られると思いますが、興味がある方は他のライブラリなども探してみるのはいかがでしょうか?